home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / GW AdaEd 1.4.2 / GWAdaDemos / GWU Demos / worms.ada < prev   
Text File  |  1995-04-09  |  3KB  |  74 lines

  1. --
  2. --    Program : Worms.ada
  3. --    Author:   Charles Kann, The George Washington University
  4. --    Purpose : This program is based on the UNIX game worms.  It is
  5. --      implemented to show how tasks can be used in ADA.  It
  6. --      is interesting since the Worms program could really be
  7. --      implemented as a sequential program.  This implementation
  8. --      shows how tasks can be used to simplify the design of a
  9. --      sequential program.  By defining the Worms as individual
  10. --      tasks, the programmer only has to worry about defining the
  11. --      behavior of a single Worm, and then creating multiple 
  12. --      instantiations of that Worm.
  13. --
  14. --    To use with GWUMON : To use this program with GWUMON, from the command
  15. --              line type:
  16. --                       adacomp -a -b -mworms worms.ada
  17. --                       gwumon -mworms
  18. --
  19. --    On the initial setup screen, choose 'Y' to the questions if tasks are
  20. --      used.  Also, set the initial speed to 10, the fastest speed 
  21. --      (the monitor will still run slow.  To get a better feel for
  22. --      how the worms run, try running it once not through the
  23. --      monitor).  The first four windows which will show up will be
  24. --      the main procedure WORMS, the task SCREEN, and two instances
  25. --      of the WORM task.  Notice how the WORM task interacts with
  26. --      SCREEN task.  
  27. --      
  28.  
  29. WITH Text_IO; USE Text_IO;
  30. WITH My_Int_IO;
  31. WITH Screen; USE Screen;
  32. WITH Creatures; USE Creatures;
  33. PROCEDURE Worms IS
  34.     TYPE W_Array IS ARRAY(INTEGER RANGE <>) of Creatures.Worm;
  35.     TYPE Worms_Array IS ACCESS W_Array;
  36.     OnScreen : Worms_Array;
  37.     Number_Of_Worms : INTEGER;
  38. BEGIN
  39.     LOOP
  40.         PUT_LINE( "Enter the number of worms (1-6) " );
  41.         My_Int_IO.GET( Number_Of_Worms );
  42.         IF  Number_Of_Worms < 1 OR Number_Of_Worms > 6 THEN
  43.         PUT_LINE ( "Invalid number of worms, use 1-6" );
  44.         ELSE
  45.         EXIT;
  46.         END IF;
  47.     END LOOP;
  48.  
  49.     OnScreen := NEW W_Array( 1..Number_Of_Worms );
  50.     PUT_LINE( "Enter the screen Size (Min X, Y, Max X, Y)");
  51.     My_Int_IO.GET( Minimum_xy.x );
  52.     My_Int_IO.GET( Minimum_xy.y );
  53.         My_Int_IO.GET( Maximum_xy.x );
  54.     My_Int_IO.GET( Maximum_xy.y );
  55.     ClearScreen;
  56.         OnScreen(1).Init_Worm( '@' );
  57.     IF Number_Of_Worms >1 THEN
  58.             OnScreen(2).Init_Worm( '#' );
  59.     END IF;
  60.     IF Number_Of_Worms >2 THEN
  61.             OnScreen(3).Init_Worm( '$' );
  62.     END IF;
  63.     IF Number_Of_Worms >3 THEN
  64.             OnScreen(4).Init_Worm( '%' );
  65.     END IF;
  66.     IF Number_Of_Worms >4 THEN
  67.         OnScreen(5).Init_Worm( '&' );
  68.     END IF;
  69.     IF Number_Of_Worms >5 THEN
  70.         OnScreen(6).Init_Worm( '*' );
  71.     END IF;
  72. END Worms;
  73.  
  74.